/**
 * 
 */
package br.com.ff.manager.managebean;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import br.com.ff.common.StatusEnum;
import br.com.ff.common.exception.EntidadeDuplicadaException;
import br.com.ff.common.exception.EntidadeNaoPodeSerRemovidaException;
import br.com.ff.equipamento.session.EquipamentoLocal;
import br.com.ff.equipamento.to.EquipamentoTO;
import br.com.ff.manager.managebean.base.BaseManagedBean;
import br.com.ff.versao.session.VersaoLocal;
import br.com.ff.versao.to.VersaoTO;

/**
 * @author Default
 *
 */
public class CrudEquipamento extends BaseManagedBean {
	
	@EJB
	EquipamentoLocal equipamentoLocal;
	
	@EJB
	VersaoLocal versaoLocal;
	
	private EquipamentoTO equipamentoTO = new EquipamentoTO();	
	
	private boolean exibirTabela = false;
	
	List<EquipamentoTO> equipamentos = new ArrayList<EquipamentoTO>();
	
	private List<SelectItem> listaVersoes = new ArrayList<SelectItem>();
	
	private long versao;
	
	private List<SelectItem> listaStatus = new ArrayList<SelectItem>();
	
	private int statusValue;
	
	public CrudEquipamento() {
	}
	
	public String consultar() throws IOException {
		EquipamentoTO equipamentoParam = new EquipamentoTO();
		equipamentoParam.setSerial(equipamentoTO.getSerial());
		
		equipamentos = equipamentoLocal.findByParams(equipamentoParam);
		
		return "success";
	}
	
	public String goIncluir() throws IOException {
		equipamentoTO = new EquipamentoTO();
		listaVersoes = carregarListaVersoes();
		return "go_salvar";
	}
	
	public void goEditar(ActionEvent event) throws IOException {
		UIParameter component = (UIParameter) event.getComponent().findComponent("id");
		Long id = (Long)component.getValue();
		
		equipamentoTO = getEquipamentoLocal().findById(id);
		listaVersoes = carregarListaVersoes();
		statusValue = equipamentoTO.getStatus().getStatus();
		
		redirecionarPara("salvarEquipamento.xhtml");
	}
	
	public String salvar() throws IOException {
		
		String ddd = getEquipamentoTO().getDdd();
		String pin = getEquipamentoTO().getPin();
		String puk = getEquipamentoTO().getPuk();
		String serial = getEquipamentoTO().getSerial();
		String telefone = getEquipamentoTO().getTelefone();
		VersaoTO versao = getEquipamentoTO().getVersaoTO();
		
		if (ddd.equals("")) {
			FacesContext.getCurrentInstance().addMessage("", new FacesMessage("DDD e obrigatorio."));
		}
		
		if (pin.equals("")) {
			FacesContext.getCurrentInstance().addMessage("", new FacesMessage("PIN e obrigatorio."));
		}
		
		if (puk.equals("")) {
			FacesContext.getCurrentInstance().addMessage("", new FacesMessage("PUK e obrigatorio."));
		}
		
//		if (serial.equals("")) {
//			FacesContext.getCurrentInstance().addMessage("", new FacesMessage("Serial e obrigatorio."));
//		}
		
		if (telefone.equals("")) {
			FacesContext.getCurrentInstance().addMessage("", new FacesMessage("Telefone e obrigatorio."));
		}
		
		if (versao == null) {
			FacesContext.getCurrentInstance().addMessage("", new FacesMessage("Versao e obrigatorio."));
		}
		
		if (getStatusValue() < 1) {
			FacesContext.getCurrentInstance().addMessage("", new FacesMessage("Status e obrigatorio."));
		}
		
		if (FacesContext.getCurrentInstance().getMessages().hasNext()) {
			return "";
		}
			
		if (getStatusValue() == 1) {
			getEquipamentoTO().setStatus(StatusEnum.ATIVO);
		} else {
			getEquipamentoTO().setStatus(StatusEnum.INATIVO);
		}		
		
		try {
			if (getEquipamentoTO().getId() != null) {
				getEquipamentoLocal().atualizar(getEquipamentoTO());
			} else {
				getEquipamentoLocal().salvar(getEquipamentoTO());
			}
		} catch (EntidadeDuplicadaException e) {
			FacesContext.getCurrentInstance().addMessage("", new FacesMessage(e.getMessage()));
			return "";
		}
		
		limpar();
		redirecionarPara("msgSucesso.xhtml?url=consultarEquipamento.xhtml");
		
		return "success";
	}
	
	public void remover(ActionEvent event) throws IOException {
		
		UIParameter component = (UIParameter) event.getComponent().findComponent("id");
		Long id = (Long)component.getValue();
		
		try {
			getEquipamentoLocal().remover(id);
		} catch (EntidadeNaoPodeSerRemovidaException e) {
			FacesContext.getCurrentInstance().addMessage("", new FacesMessage(e.getMessage()));			
		}
		
		String pagina = "consultarEquipamento.xhtml";
		
		if (!FacesContext.getCurrentInstance().getMessages().hasNext()) {
			pagina = "msgSucesso.xhtml?url=consultarEquipamento.xhtml";
			limpar();
		}
		
		redirecionarPara(pagina);
	}
	
	private List<SelectItem> carregarListaVersoes() {
		List<SelectItem> lista = new ArrayList<SelectItem>();
		
		lista.add(new SelectItem(null, " - Selecione - "));
		
		List<VersaoTO> versoes = getVersaoLocal().findAll();
		
		for (VersaoTO versaoTO : versoes) {
			lista.add(new SelectItem(versaoTO, versaoTO.getVersao()));
		}
		
		return lista;
	}
	
	private void limpar(){
		equipamentos = new ArrayList<EquipamentoTO>();
		equipamentoTO = new EquipamentoTO();
	}

	public EquipamentoLocal getEquipamentoLocal() {
		return equipamentoLocal;
	}

	public void setEquipamentoLocal(EquipamentoLocal equipamentoLocal) {
		this.equipamentoLocal = equipamentoLocal;
	}

	public EquipamentoTO getEquipamentoTO() {
		return equipamentoTO;
	}

	public void setEquipamentoTO(EquipamentoTO equipamentoTO) {
		this.equipamentoTO = equipamentoTO;
	}

	public List<EquipamentoTO> getEquipamentos() {
		return equipamentos;
	}

	public void setEquipamentos(List<EquipamentoTO> equipamentos) {
		this.equipamentos = equipamentos;
	}
	
	public boolean isExibirTabela() {
		if (!equipamentos.isEmpty()) {
			exibirTabela = true; 
		} else {
			exibirTabela = false;
		}
		return exibirTabela;
	}

	public void setExibirTabela(boolean exibirTabela) {
		this.exibirTabela = exibirTabela;
	}
	
	public List<SelectItem> getListaStatus() {
		
		if (listaStatus.isEmpty()) {
			listaStatus = gerarListStatus();
		}
		return listaStatus;
		
	}

	public void setListaStatus(List<SelectItem> listaStatus) {
		this.listaStatus = listaStatus;
	}

	public int getStatusValue() {
		return statusValue;
	}

	public void setStatusValue(int statusValue) {
		this.statusValue = statusValue;
	}

	public VersaoLocal getVersaoLocal() {
		return versaoLocal;
	}

	public void setVersaoLocal(VersaoLocal versaoLocal) {
		this.versaoLocal = versaoLocal;
	}

	public List<SelectItem> getListaVersoes() {
		return listaVersoes;
	}

	public void setListaVersoes(List<SelectItem> listaVersoes) {
		this.listaVersoes = listaVersoes;
	}

	public long getVersao() {
		return versao;
	}

	public void setVersao(long versao) {
		this.versao = versao;
	}
	
}
